#include <stdint.h>
#include <stdlib.h>

/**
 * Xorshift 随机数生成器结构体（模拟 Java 类的成员变量）
 * 成员：
 *   r: 种子/状态变量（对应 Java 中的 private int r）
 */
typedef struct {
    int32_t r;  // 使用 int32_t 明确 32 位整数，匹配 Java 的 int 类型
} RandomGenerator;

/**
 * 初始化随机数生成器（模拟 Java 构造函数）
 * @param gen: RandomGenerator 实例指针
 * @param seed: 初始种子
 */
void random_generator_init(RandomGenerator *gen, int32_t seed) {
    if (gen == NULL) {
        return;  // 空指针保护
    }
    gen->r = seed;
}

/**
 * 生成下一个随机数（模拟 Java 的 next() 方法）
 * @param gen: RandomGenerator 实例指针
 * @return: 32 位随机整数
 */
int32_t random_generator_next(RandomGenerator *gen) {
    if (gen == NULL) {
        return 0;  // 空指针保护，返回默认值
    }
    // 严格对齐 Java 的位运算逻辑：
    // r ^= r << 13;
    gen->r ^= gen->r << 13;
    // r ^= r >>> 17; （Java 的无符号右移 >>>，C 中对有符号数需用 uint32_t 转换实现）
    gen->r ^= (uint32_t)gen->r >> 17;
    // r ^= r << 5;
    gen->r ^= gen->r << 5;
    return gen->r;
}

// 示例测试代码
#include <stdio.h>

int main() {
    // 1. 创建并初始化随机数生成器（种子 12345）
    RandomGenerator gen;
    random_generator_init(&gen, 12345);

    // 2. 生成 5 个随机数并输出
    printf("生成的随机数：\n");
    for (int i = 0; i < 5; i++) {
        int32_t rand_val = random_generator_next(&gen);
        printf("%d\n", rand_val);
    }

    return 0;
}